Computer software is used to control numerous products and systems. Software is continuing to expand in both size and complexity at an exponential rate. True comprehension of how many systems that operate under software control is beyond the understanding of individual programmers. Examples of this lack of understanding and control are many and include, (1) the need for the Ctrl-Alt-Del key combination to regain control of a “locked-up” operating system, (2) the need for “watchdog timers” in hardware circuitry to recognize when a computer has gone out of control and must be reset automatically, and (3) programmers regularly write code patches to fix symptoms and not the problem.
A commercial product currently available for use in developing and trouble shooting digital equipment is known as a logic analyzer. A logic analyzer is a memory storage device having many inputs connected directly to a data base or to the particular circuit being observed which converts the 1's and 0's from a microprocessor to assembly-language mnemonics that software developers can use to trace the execution of code blocks. A “timing mode” of acquisition allows for timing analysis of the relationship between digital signals, while a “state mode” of acquisition allows for state analysis of digital signals at specific clock-transition times. Logic analyzers read direct electrical signals, translate these signals into operational code, and are somewhat difficult to operate.
This invention presents an instrument that can be used to view software code as it is operating in real time. Much like an oscilloscope that views voltage changes in hardware, this invention displays the individual blocks of software code as they are called to operate by their operating system in a computer-controlled product.
By observing the operations of the product and at the same time observing the software code that is producing these operations, many advantages follow, including those in the following list:
1) A correlation can be established between the execution of a block of code and the expected system response or event.
2) Old unused code that is no longer needed can be identified and discarded. This frees up computer memory and thus saves cost.
3) The amount of time being used by blocks of code can be displayed and measured. Unlike memory space, there is no simple way to measure available time. If execution time is available, then features may be added to existing hardware. Redesigning hardware for faster processors would not be necessary.4) Long term problems can be identified by logging software operations, and later correlating the occurrence of problems with the software operating at that time.5) The true sequences of code blocks can be observed as they evolve. The true sequential nature of code as it executes can be observed and studied.6) Current practice is to infer code execution by observing system actions. Now code execution and resultant actions can be observed simultaneously.7) Code execution can be observed locally and remotely anywhere on this planet by direct connection such via the Internet.8) Code execution can be observed remotely anywhere on and off this planet by wireless connections. An operator on earth can observe code operation on a target computer located on Mars with a wireless connection.9) Rare occurrence problems can be identified by logging software operations, and later correlating the captured rare occurrence of the problem with the software operating at that time.